/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package csp;

import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Leandro
 */
public class ProblemaAntenas extends CSP implements Cloneable {

    public ProblemaAntenas(ProblemaAntenas problema) {


        this.dominio=problema.getDominio();

        this.variables=problema.getVariables();

        this.verificadorRestricciones=problema.getVerificadorRestricciones();

    }

    public String imprimirProblema(){
        String rta="#";
        rta=rta+"Problema id="+this.toString()+"\n";
        rta=rta+"#Dominio del problema:\n";
        Antena aux;
        for(Valor v:dominio){
            aux=(Antena) v;
            rta=rta+"#Antena n° "+aux.getNro()+" : "+aux.getFrecuencia()+"Hz"+" "
                    +aux.getPotencia()+"Mw\n";
        }
        ExpertoRestriccionesAntena exp=(ExpertoRestriccionesAntena) this.verificadorRestricciones;
        rta=rta+"#Restricción de potencia: "+exp.getPotencia()+"\n";
        rta=rta+"#Variables del problema:\n";
        UbicacionAntena auxU;
        String valorAux = "No asignado";
        for(Variable var:variables){
            auxU=(UbicacionAntena) var;
            if(auxU.getAsignado()!=null){
                valorAux=auxU.getAsignado().toString();
            }
            rta=rta+"#Ubicacion n° "+auxU.getNro()+" : antena = "+valorAux+"\n";
        }

        return rta;
    }
    public ProblemaAntenas(double[] frecienciasAntenas,
                           double[] potenciasAntena,
                           int cantLugares,
                           
                           double potenciaRestricta){
       
        int cantAntenas=frecienciasAntenas.length;
        this.dominio=new ArrayList<Valor>();

        for(int i=0;i<frecienciasAntenas.length;i++){
            dominio.add(new Antena(i, frecienciasAntenas[i], potenciasAntena[i]));
        }
        this.variables=FabricaEstructuraVariables.getInstancia().getEstructura(cantLugares);
        for(Variable ubic:this.variables){
            
           ubic.setValoresPosibles(new ArrayList<Valor>(dominio));
        }
        this.verificadorRestricciones=new ExpertoRestriccionesAntena(potenciaRestricta);



    }

}
